//上浮操作
void sift(int i)
{
    while(array[i]>array(getparent()))
    {
        std::swap(array[i].array(getparent()))
        i=getparent(i);
    }
}
//下沉操作
void down(int i)
{
    int left=getleftchild(i);
    int right=getrightchild(i);
    int max=i;
    if(left<size&&array[left]>array[max])
        max=left;
    if(right<size&&array[right]>array[max])
        max=right;
    if(max!=i)
    {
        std::swap(array[i],array[max]);
        down(max)
    }
}

//找出20个数的最小数
int main()
{
    srand(time(nullptr))
    int a[20]={0}
    for(int i=0;i<20;i++)
    {
        a[i]=srand%100;
    }
    minheap h;
    for(int i=0;i<5;i++)
    {
        h.insert(a[i]);
    }
    for(int i=5;i<20;i++)
    {
        if(h.gettop()<a[i])
        {
            h.insert(a[i]);
            h.remove();
        }
    }
}
//堆排序
MakeHeap(int *a,int n,int index)
{
    int left=2*index+1;
    int right=2*index+2;
    int max=index;
    if(left<n&&a[left]>a[max])
        max=left;
    if(right<n&&a[right]>a[max])
        max=right;
    if(max!=index)
    {
        std::swap(a[index],a[max]);
        MakeHeap(max);
    }
}
void HeapSort(int *a,int n)
{
    for(int i=n/2-1;i>=0;i--)
        MakeHeap(a,n,i);
    for(int i=n-1;i>0;i--)
    {
        std::swap(a[0],a[i]);
        MakeHeap(a,i,0);
    }
}










